随着在应用型机器学习的问题上工作的时间越来越久,你会开发出一种模式或者流程来快速地得到优良结果。一旦开发出了这种流程,你就可以一遍又一遍地套用在不同问题上。流程越健全,就可以越快地得到可靠的结果。
在此分享我的流程。大家可以以这个为基础,逐渐建立自己的流程。
应用型机器学习流程
我喜欢用一个五步曲:
① 定义问题
② 准备数据
③ 小试算法
④ 优化结果
⑤ 展示结果
这个流程是很灵活的。比如,“准备数据” 环节通常是分为分析数据(总结归纳和可视化)和准备数据(准备原始数据)。“小试算法”可能包含了多个正式的实验。
这是一个巨大的生产线,而我想线性地走完。使用自动化工具的好处就是你可以回首以前的步骤,做出一些调试,再开始。比如你回到“准备数据”,对数据做出一些新的变换,再从新跑实验,看看有什么不同的结果,比较一下。
我用的这个流程是从标准的数据挖掘中的数据库知识中提炼出来的。简称 KDD(Knowledge Discovery in Databases)。
① 定义问题 Define the Problem
我喜欢用个三部曲来定义问题。我喜欢从不同角度来看问题。
第一步:这个问题是什么?正式地和非正式地描述这个问题。列出假设和相似的问题。
第二步:为什么这个问题需要被解决?列出你的动机,解决方案的好处和解决方案可以如何被使用。
第三步:我会怎么解决这个问题?描述如何手动解决这个问题来刷一波领域知识。
② 准备数据 Prepare Data
在准备数据的时候,我也喜欢有一个分析数据的步骤,包括一些数据的统计、作图等可视化。这些可以帮助你理解数据。我也喜欢细节地来看每个属性之间的关系。这些步骤强迫我去以问题的角度来思考这些数据,在数据迷失在算法中之前。
也是一个三部曲。
第一步:数据选择。考虑什么数据是可得到的,什么数据是缺失的,什么是可以移除的。
第二步:数据预处理。格式化、清理、采样你的数据。
第三步:数据变形(Transformation)。进行特征工程(Feature Engineering),包括特征缩放(Feature Scaling)、属性解构(Attribute Decomposition)、属性聚合(Attribute Aggregation)。
③ 小试算法
我默认用10份交叉验证来测试。所有的实验(算法和数据集的组合)重复10次,并且报告正确率的平均值、标准差。我也使用统计显著性测试来将噪音从信号中冲掉。箱形图(Box-plot)在总结正确率分布上很有用。
我小试算法,这意味着加载一系列标准的机器学习算法到我的测试环境来跑正式实验。我通常从主要的算法家族中选出10-20个来跑数据集的各种版本。
小试算法的目的是挑选出合适的算法和数据集的组合来进行优化微调。
基于表现良好的算法的更集中的实验可以在这一步进行,但是算法调试留个下一步。
④ 提高、优化结果
算法小试之后,是时候来榨取出最好的结果了。我会跑一个自动化的最优算法的参数敏感度分析。我也设计标准的组合方法(Ensemble Method)来跑最优算法。我花很多时间来思考如何从最优算法和数据集中榨取更多的信息。
重要的事情说三遍,结果的统计显著性是至关重要的。专注于方法和算法配置很容易。只有统计显著性高的结果才有意义。我喜欢有一个不同结果的排行榜。
总而言之也是三部曲:
算法调试(Algorithm Tuning):发现最优模型其实就是一个在参数组合中的搜索
组合方法(Ensemble Method):多个模型的预测被结合到一起
极端特征工程(Extreme Feature Engineering):顾名思义,做各种特征工程的尝试
⑤ 展示结果
除非有成效,一个复杂的机器学习问题的结果是没有意义的。这通常都意味着给利益相关者展示。甚至这只是一个比赛或者个人项目,我仍然会走展示结果的流程。这是一个很好的锻炼机会,可以学到很多对下一次有用的东西。(本文由优达学城(Udacity)组织翻译。原文来源:achinelearningmastery.com。)
上海CDA团购活动已经有17位同学加入了!想学习数据分析的小伙伴们赶快行动起来了!加入到大数据的学习中,2017年证书到手高薪我有!